package admin

// func (adminResource *AdminResource) TableName() string {
// 	return "admin_resource"
// }

//AdminUser实体类
type AdminResource struct {
	PId         int              `json:"pId"         gorm:"column:f_id;primaryKey;index:idx_admin_resource_id;autoIncrement;description:功能ID"`
	PAppid      int              `json:"pAppid"      gorm:"index:idx_admin_resource_id;index:idx_admin_resource_permission;column:f_app_id;comment:应用ID"`
	PName       string           `json:"pName"       gorm:"type:varchar(50);column:f_name;unique;description:名称"`
	PPid        int              `json:"pPid"        gorm:"column:f_pid;description:父级ID"`
	PLevel      int              `json:"pLevel"      gorm:"column:f_level;description:层级"`
	PSort       int              `json:"pSort"       gorm:"column:f_sort;description:排序"`
	PType       int8             `json:"pType"       gorm:"default:1;column:f_type;description:资源类型(1页面内功能   2页面  3分类 )"`
	PDesc       string           `json:"pDesc"       gorm:"type:varchar(60);column:f_desc;description:描述"`
	PPermission string           `json:"pPermission" gorm:"type:varchar(200);index:idx_admin_resource_permission;column:f_permission;description:功能对应的权限标识"`
	Children    []*AdminResource `json:"children"    gorm:"-"`
}

func (model *AdminResource) ContainsChild(child *AdminResource) bool {
	if model.Children == nil {
		return false
	} else {
		for _, chi := range model.Children {
			if chi == child {
				return true
			}
		}
	}
	return false
}

type AdminResources struct {
	Arr []AdminResource
	By  func(p, q *AdminResource) bool
}

func (pw AdminResources) Len() int { // 重写 Len() 方法
	return len(pw.Arr)
}
func (pw AdminResources) Swap(i, j int) { // 重写 Swap() 方法
	pw.Arr[i], pw.Arr[j] = pw.Arr[j], pw.Arr[i]
}
func (pw AdminResources) Less(i, j int) bool { // 重写 Less() 方法
	return pw.By(&pw.Arr[i], &pw.Arr[j])
}
